package classreflex;


import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * 获取Class类的（实例）对象
 * 1、运行时类（已经加载进内存的.class文件）
 * 2、Class的实列就对应着一个运行时类。
 * 3、运行时类在一定的时间内只有一个，我们可以通过Class类的属性、方法来获取
 * 4、前三种获取Class实列的方法需要掌握
 * @author 15594
 */
public class ReflectionTest {

    public static void main(String[] args) throws ClassNotFoundException, IOException {

        //方式一：调用运行时类的属性
        Class person = Person.class;
        System.out.println(person);

        //方式二：通过运行时类的对象
        Person person1 = new Person();
        Class aClass1 = person1.getClass();
        System.out.println(aClass1.getName());

        //方式三：通过调用Class类的静态方法，其中这种方式使用得比较多，并且能动态获取不同的Class实例
        Class aClass = Class.forName("classreflex.Person");
        System.out.println(aClass.getName());

        System.out.println(person==aClass);
        System.out.println(person==aClass1);

        //方式四：通过类加载器：ClassLoader
        ClassLoader classLoader = ReflectionTest.class.getClassLoader();
        Class aClass2 = classLoader.loadClass("classreflex.Person");
        System.out.println(aClass2);

        Class c = void.class;
        System.out.println(c);
    }

}
class ClassLoaderTest{
    public static void main(String[] args) throws IOException {
        //方式一：默认目录工程根目录下
        FileInputStream fileInputStream = new FileInputStream("src/classreflex/jdbc.properties");
        Properties properties = new Properties();
        properties.load(fileInputStream);
        String user = properties.getProperty("user");
        System.out.println(user);
        String password = properties.getProperty("password");
        System.out.println(password);
        //方式二：默认目录src下
        ClassLoader classLoader = ClassLoaderTest.class.getClassLoader();
        InputStream is = classLoader.getResourceAsStream("classreflex/jdbc.properties");
        Properties properties1 = new Properties();
        properties1.load(is);
        System.out.println(properties1.getProperty("user"));
        System.out.println(properties1.getProperty("password"));

    }
}

